﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using ERP_RORZE_DLL.Product.database;
using ERP_RORZE_DLL.Product.DAO;
using System.Text.RegularExpressions;

namespace ERP_RORZE_PRODUCT.Product.PartHandling
{
    public partial class frm_MachineHandInputAdd : DevExpress.XtraEditors.XtraForm
    {
        public event EventHandler Reload;
        ClsDMachineHandTable obj = new ClsDMachineHandTable();
        ClsPartHandlingDAO clsParthandinhDAO = new ClsPartHandlingDAO();
        DataTable dt;

        public frm_MachineHandInputAdd()
        {
            InitializeComponent();
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void frm_MachineHandInputAdd_Load(object sender, EventArgs e)
        {
            //lấy danh sách MONo cho vào combo
            dt = clsParthandinhDAO.GetlAllMONo1();
            List<ClsMOTable> objs = new List<ClsMOTable>();
            foreach (DataRow r in dt.Rows)
            {
                ClsMOTable obj = new ClsMOTable();
                obj.MONo = r["MONo"].ToString();  //
                obj.PartID = r["PartID"].ToString();  //
                obj.MOQty = int.Parse(r["MOQty"].ToString());   ////
                obj.DeadLine = (DateTime)r["Deadline"];
                objs.Add(obj);
            }

            cbMONo.DataSource = objs;
            cbMONo.DisplayMember = "MONo";
            cbMONo.ValueMember = "MONo";

            //lấy danh sách StaffID cho vào combo
            dt = clsParthandinhDAO.GetlAllStaffID();
            cbStaffID.DataSource = dt;
            cbStaffID.DisplayMember = "StaffID";
            cbStaffID.ValueMember = "StaffID";
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            //try
            //{
            int intNG = 0;
            dt = clsParthandinhDAO.GetMachHandMO(cbMONo.SelectedValue.ToString());
            foreach (DataRow r in dt.Rows)
            {
                intNG = intNG + int.Parse(r["SumofNG"].ToString());
            }
            int intOK = int.Parse(txtMOQty.Text) - intNG;

            //

            int intMachHandOK = 0;
            int intMachHandNG = 0;
            dt = clsParthandinhDAO.GetMachHandMO02(cbMONo.SelectedValue.ToString());
            foreach (DataRow r in dt.Rows)
            {
                intMachHandOK = intMachHandOK + int.Parse(r["MHOKQty"].ToString());
                intMachHandNG = intMachHandNG + int.Parse(r["MHNGQty"].ToString());
            }

            if (IsNumber(txtNGQty.Text) == false)
            {
                MessageBox.Show("Phải đảm nảo NG phải là số nguyên");
            }
            else if (int.Parse(txtNGQty.Text) < 0)
            {
                MessageBox.Show("Phải đảm nảo NG phải là số nguyên lớn hơn 0");
            }
            else if (int.Parse(txtNGQty.Text) > intNG)
            {
                MessageBox.Show("Số lượng NG trong bộ phận gia công là: "+ intNG+". Kiểm tra lại số lượng giao nhận");
            }
            else if (IsNumber(txtOKQty.Text) == false)
            {
                MessageBox.Show("Phải đảm bảo OK là số nguyên");
            }
            else if (int.Parse(txtOKQty.Text) < 0)
            {
                MessageBox.Show("OK phải là số nguyên dương");
            }
            else if (int.Parse(txtOKQty.Text) > intOK)
            {
                MessageBox.Show("Số lượng OK trong bộ phận gia công là: "+intOK+". Kiểm tra lại số lượng giao nhận");
            }
            else if (txtOKQty.Text == "0" && txtNGQty.Text == "0")
            {
                MessageBox.Show("Số sản phẩm OK và NG không thể đồng thời bằng 0");
            }
            else if(int.Parse(txtOKQty.Text) + intMachHandOK > intOK)
            {
                MessageBox.Show("Số lượng OK của MO này là: "+intOK+". Bộ phận Hand Finish nhận được:"+ intMachHandOK+" sản phẩm. Kiểm tra lại số lượng giao nhận");
            }
            else if (int.Parse(txtNGQty.Text) + intMachHandNG > intNG)
            {
                MessageBox.Show("Số lượng NG của MO này là: " + intNG + ". Bộ phận Hand Finish nhận được:" + intMachHandNG + " sản phẩm. Kiểm tra lại số lượng giao nhận");
            }
            else
            {
                obj.Date = dateDate.Value;
                obj.MONo = cbMONo.SelectedValue.ToString();
                obj.StaffID = cbStaffID.Text;
                obj.NGQty = int.Parse(txtNGQty.Text);
                obj.OKQty = int.Parse(txtOKQty.Text);
                obj.Finished = checkBox1.Checked;
                obj.Note = txtNote.Text;
                clsParthandinhDAO.InsertMAchineHandDetail(obj);
                MessageBox.Show("Đã nhập xong");
                Reload(sender, e);
            }
            //}
            //catch
            //{
            //    MessageBox.Show("NGQty, OKQty, SPQty phải là kiểu số");
            //}
        }

        private void label4_Click(object sender, EventArgs e)
        {

        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {

        }

        private void cbMONo_SelectedValueChanged(object sender, EventArgs e)
        {
            ClsMOTable obj = ((ClsMOTable)cbMONo.SelectedItem);
            txtMOQty.Text = obj.MOQty.ToString();
            txtDeadline.Text = obj.DeadLine.ToString();
            txtPartID.Text = obj.PartID.ToString();
        }
        public bool IsNumber(string pText)
        {
            Regex regex = new Regex(@"^[-+]?[0-9]*\.?[0-9]+$");
            return regex.IsMatch(pText);
        }
        protected override bool ProcessKeyPreview(ref Message m)
        {
            if (m.Msg == 0x0100 && (int)m.WParam == 13)
            {
                this.ProcessTabKey(true);
            }
            return base.ProcessKeyPreview(ref m);
        }
    }
}